@echo off
chcp 65001 >nul
title 自动测试和报告生成器

echo ===============================================
echo           自动测试和报告生成器
echo ===============================================
echo.

:: 设置路径（从Application.Test.Reporter目录出发）
set PROJECT_ROOT=%~dp0..\
set TEST_PROJECT=%PROJECT_ROOT%Application.Test\Application.Test.csproj
set TEST_RESULTS_DIR=%PROJECT_ROOT%Application.Test\TestResults
set REPORT_OUTPUT_DIR=%~dp0Reports
set REPORTER_PROJECT=%~dp0Application.Test.Reporter.csproj

echo [信息] 项目根目录: %PROJECT_ROOT%
echo [信息] 测试项目: %TEST_PROJECT%
echo [信息] 测试结果目录: %TEST_RESULTS_DIR%
echo [信息] 报告输出目录: %REPORT_OUTPUT_DIR%
echo [信息] 报告生成器项目: %REPORTER_PROJECT%
echo.

:: 检查测试项目是否存在
if not exist "%TEST_PROJECT%" (
    echo [错误] 测试项目文件不存在: %TEST_PROJECT%
    echo 请确保项目结构正确
    pause
    exit /b 1
)

:: 检查报告生成器项目是否存在
if not exist "%REPORTER_PROJECT%" (
    echo [错误] 报告生成器项目文件不存在: %REPORTER_PROJECT%
    echo 请确保项目结构正确
    pause
    exit /b 1
)

:: 清理旧的测试结果
echo [步骤1] 清理旧的测试结果...
if exist "%TEST_RESULTS_DIR%" (
    rmdir /s /q "%TEST_RESULTS_DIR%" 2>nul
    echo [成功] 已清理旧的测试结果
) else (
    echo [信息] 测试结果目录不存在，无需清理
)

:: 运行单元测试并生成TRX报告
echo [步骤2] 运行单元测试并生成TRX报告...
dotnet test "%TEST_PROJECT%" --logger "trx;LogFileName=test-results.trx" --results-directory "%TEST_RESULTS_DIR%"

if %ERRORLEVEL% neq 0 (
    echo [警告] 测试执行过程中出现错误，错误代码: %ERRORLEVEL%
    echo 将继续尝试生成报告...
)

:: 检查TRX文件是否生成
echo.
echo [步骤3] 检查TRX文件生成情况...
set TRX_FILE=
for /f "delims=" %%i in ('dir /b /o-d "%TEST_RESULTS_DIR%\*.trx" 2^>nul') do (
    set TRX_FILE=%%i
    goto :found_trx
)

:found_trx
if not defined TRX_FILE (
    echo [错误] 未找到TRX文件，无法生成测试报告
    echo 请检查测试执行是否成功
    pause
    exit /b 1
)

echo [成功] 找到TRX文件: %TEST_RESULTS_DIR%\%TRX_FILE%

:: 构建报告生成器
echo.
echo [步骤4] 构建报告生成器...
cd /d "%~dp0"
dotnet build --nologo

if %ERRORLEVEL% neq 0 (
    echo [错误] 报告生成器构建失败
    echo 尝试重新构建...
    dotnet build
    if %ERRORLEVEL% neq 0 (
        echo [错误] 报告生成器构建仍然失败
        pause
        exit /b 1
    )
)

echo [成功] 报告生成器构建完成

:: 生成测试报告
echo.
echo [步骤5] 生成测试报告...
dotnet run --project "%REPORTER_PROJECT%" "%TEST_RESULTS_DIR%" "%REPORT_OUTPUT_DIR%"

if %ERRORLEVEL% neq 0 (
    echo [错误] 报告生成失败，错误代码: %ERRORLEVEL%
    pause
    exit /b 1
)

:: 显示报告文件信息
echo.
echo [步骤6] 显示生成的报告文件...
set LATEST_REPORT=
for /f "delims=" %%i in ('dir /b /o-d "%REPORT_OUTPUT_DIR%\单元测试报告_*.md" 2^>nul') do (
    set LATEST_REPORT=%%i
    goto :show_report
)

:show_report
if defined LATEST_REPORT (
    echo [成功] 最新报告文件: %LATEST_REPORT%
    echo 文件路径: %REPORT_OUTPUT_DIR%\%LATEST_REPORT%
    
    :: 显示报告文件大小
    for %%F in ("%REPORT_OUTPUT_DIR%\%LATEST_REPORT%") do (
        set REPORT_SIZE=%%~zF
    )
    echo 文件大小: %REPORT_SIZE% 字节
    
    :: 显示报告前几行内容
    echo.
    echo === 报告摘要 ===
    setlocal enabledelayedexpansion
    set count=0
    for /f "usebackq delims=" %%a in ("%REPORT_OUTPUT_DIR%\%LATEST_REPORT%") do (
        echo %%a
        set /a count+=1
        if !count! equ 10 goto :end_preview
    )
    :end_preview
    endlocal
) else (
    echo [警告] 未找到报告文件
)

echo.
echo ===============================================
echo           操作完成
echo ===============================================
echo.
echo 测试报告已成功生成并保存在以下目录:
echo %REPORT_OUTPUT_DIR%
echo.
echo 按任意键退出...
pause >nul